package com.atguigu.gmall.order.controller.api;

import com.atguigu.gmall.common.execption.GmallException;
import com.atguigu.gmall.common.result.Result;
import com.atguigu.gmall.model.order.OrderInfo;
import com.atguigu.gmall.model.payment.PaymentInfo;
import com.atguigu.gmall.order.service.OrderService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.*;

/***
 * 订单相关的controller层
 */
@RestController
@RequestMapping("/api/order")
public class ApiOrderController {

    @Autowired
    private OrderService orderService;

    /**
     * 根据用户选择不同的支付渠道，获取指定订单的支付二维码信息
     * @param orderId
     * @param paymentType
     * @return
     */
    @GetMapping("/getPaymentInfo")
    public String getPaymentInfo(String orderId,String paymentType){
        //1 校验参数
        if(StringUtils.isEmpty(orderId) && StringUtils.isEmpty(paymentType)){
            throw new GmallException("参数非法！",null);
        }

        //2 调用业务层方法
        String payUrl = orderService.getPaymentInfo(orderId,paymentType);

        //3 返回
        return payUrl;
    }

    /**
     * 用户主动/被动取消订单
     * @param orderId
     * @return
     */
    @PutMapping("/cancel")
    public Result cancel(Long orderId){
        //1 校验参数
        if(orderId == null){
            throw new GmallException("参数错误", null);
        }

        //2 调用业务层方法
        orderService.cancel(orderId);

        //3 响应
        return Result.ok();
    }

    /**
     * 新增订单
     * @param orderInfo
     * @return
     */
    @PostMapping("/save")
    public Result save(@RequestBody OrderInfo orderInfo) {

        //校验参数
        if (orderInfo == null) {
            throw new GmallException("参数错误", null);
        }

        //调用业务方法
        orderService.save(orderInfo);

        //返回
        return Result.ok();
    }
}
